BLAH BLAH STUFF STUFF
Total number of registered and eligible voters (A1a):
print(formatC(sum(fl.df$registered, na.rm = T), format="d", big.mark=","))
[1] "14,126,722"
Total number of registration forms received between the close of the registration for the 2016 General Election and the close of registration for the 2018 General Election (A3a):
formatC(sum(fl.df$reg_total, na.rm = T), format="d", big.mark=",")
[1] "6,541,838"

EAVS calculations for Liberty County are consistently inconsistent.


WHATS THE NEWISH LAW ABOUT VOTER REG IN FLORIDA?

Total number of domestic by-mail ballots transmitted (C1a):
formatC(sum(fl.df$vbm_total, na.rm = T), format="d", big.mark=",")
[1] "3,499,591"

Note The VBM ‘returned’ mail category includes ballots that counted and ballots that were rejected.
Total number of by-mail ballots that were processed, counted, and included in the canvas of election results:
formatC(sum(fl.df$mail_total, na.rm = T), format="d", big.mark=",")
[1] "2,585,374"
Total number of domestic, civilian by-mail ballots rejected (C4a):
formatC(sum(fl.df$mail_rejected, na.rm = T), format="d", big.mark=",")
[1] "30,540"


There were 40,144 poll workers on Election Day covering 4,461 polling places statewide. On average, each polling place is allocated 9 pollworkers on Election Day.
But there were 7,847 poll workers during Early Vote covering 373 polling places statewide. On average, each early vote polling place is allocated 21 poll workers on Election Day.
Difficultly in recruiting pollworkers: (1 = very difficult, 2 = somewhat difficult, 3 = neither difficult nor easy, 4 = somewhat easy, 5 = easy, 6 = not enough info to answer) aes(x = reorder(match.county, ColumnName), ColumnName))


Total number of provisional ballots (E1a):
formatC(sum(fl.df$prov_total, na.rm = T), format="d", big.mark=",")
[1] "13,530"

Total number of rejected provisional ballots (E1d):
formatC(sum(fl.df$prej_tot, na.rm = T), format="d", big.mark=",")
[1] "8,291"
EAVS are not always internally consistent. Florida data has some inconsistencies. In this catergory, Duval County is off by 37, Miami-Dade is off by 16 and Suwannee is off by 1.

ggplotly(vt, tooltip = c("county", "vbm_total"), autosize = F, width = 500, height = 500)
Removed 1 rows containing missing values (position_stack).
LS0tDQp0aXRsZTogIkZsb3JpZGEgQ29udmVuaW5nIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KQkxBSCBCTEFIIFNUVUZGIFNUVUZGIA0KDQpgYGB7ciwgb3V0LndpZHRoID0gJzYwJScsIGZpZy5oZWlnaHQgPSA2fQ0KdG1hcF9tb2RlKCJ2aWV3IikNCnRtX3NoYXBlKGNudHlEZW1vKSArIA0KICB0bV9wb2x5Z29ucygiYWlhbiIsIHRpdGxlID0gIiMgQW1lcmljYW4gSW5kaWFuL0FsYXNrYSBOYXRpdmUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJQdXJwbGVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhID0gMC43LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLmNvbCA9ICJncmV5MzAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLmFscGhhID0gMC4zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSAiamVua3MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAiTkFNRTEwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLnZhcnMgPSBjKCIlIEFJQU4iID0gInBfYWlhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIyBBSUFOIiA9ICJhaWFuIikpICsNCiAgdG1fc2hhcGUoYWlhbnJlcykgKyB0bV9wb2x5Z29ucygib3JhbmdlIiwgYWxwaGEgPSAwLjIsIGlkID0gIk5BTUUiKQ0KYGBgDQoNCg0KYGBge3IsIG91dC53aWR0aCA9ICc3MCUnLCBmaWcuaGVpZ2h0ID0gNn0NCnRtYXBfbW9kZSgidmlldyIpDQp0bV9zaGFwZShjbnR5RGVtbykgKyANCiAgdG1fcG9seWdvbnMoInBfaGlzIiwgdGl0bGUgPSAiJSBMYXRpbm8vSGlzcGFuaWMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFsZXR0ZSA9ICJQdXJwbGVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhID0gMC43LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLmNvbCA9ICJncmV5MzAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLmFscGhhID0gMC4zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSAiamVua3MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAiTkFNRTEwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLnZhcnMgPSBjKCIlIExhdGluby9IaXNwYW5pYyIgPSAicF9oaXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMgTGF0aW5vL0hpc3BhbmljIiA9ICJoaXNwYW5pYyIpKSArDQogIHRtX3NoYXBlKFNlY3Rpb24yMDMpICsgdG1fcG9seWdvbnMoInJlZCIsIGFscGhhID0gMC4yLCBpZCA9ICJOQU1FIikNCmBgYA0KDQoNClRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGFuZCBlbGlnaWJsZSB2b3RlcnMgKEExYSk6DQpgYGB7cn0NCnByaW50KGZvcm1hdEMoc3VtKGZsLmRmJHJlZ2lzdGVyZWQsIG5hLnJtID0gVCksIGZvcm1hdD0iZCIsIGJpZy5tYXJrPSIsIikpDQpgYGANCg0KDQpUb3RhbCBudW1iZXIgb2YgcmVnaXN0cmF0aW9uIGZvcm1zIHJlY2VpdmVkIGJldHdlZW4gdGhlIGNsb3NlIG9mIHRoZSByZWdpc3RyYXRpb24gZm9yIHRoZSAyMDE2IEdlbmVyYWwgRWxlY3Rpb24gYW5kIHRoZSBjbG9zZSBvZiByZWdpc3RyYXRpb24gZm9yIHRoZSAyMDE4IEdlbmVyYWwgRWxlY3Rpb24gKEEzYSk6DQpgYGB7cn0NCmZvcm1hdEMoc3VtKGZsLmRmJHJlZ190b3RhbCwgbmEucm0gPSBUKSwgZm9ybWF0PSJkIiwgYmlnLm1hcms9IiwiKQ0KYGBgDQoNCg0KYGBge3J9DQoNCmZsLnJlZ2Zvcm1zPC1tZWx0KGZsLmRmLCBpZC52YXJzID0gIm1hdGNoLmNvdW50eSIsIG1lYXN1cmUudmFycyA9IGMoInJlZ192YWxpZCIsICJyZWdfcHJlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ19kdXAiLCAicmVnX2ludmFsaWQiLCAicmVnX2NoYW5nZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWdfanVyaXNjaGFuZ2UiKSkNCg0KZ2dwbG90KGZsLnJlZ2Zvcm1zLCBhZXModmFyaWFibGUsIHZhbHVlKSkrDQogICAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpKyANCiAgbGFicyh4ID0gIiIsIHkgPSAiIiwgdGl0bGUgPSAiRUFWUyAyMDE4Iiwgc3VidGl0bGUgPSAiVHlwZXMgb2YgUmVnaXN0cmF0aW9uIEZvcm1zIFJlY2VpdmVkIEJldHdlZW4gMjAxNiAmIDIwMTgiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0ID0gMSkpKw0KICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJyZWdfdmFsaWQiID0gIlZhbGlkIiwgInJlZ19wcmUiID0gIlByZS1yZWdpc3RyYXRpb24iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ19kdXAiID0gIkR1cGxpY2F0ZXMiLCAicmVnX2ludmFsaWQiID0gIkludmFsaWQiLCAicmVnX2NoYW5nZSIgPSAiUmVnaXN0cmF0aW9uIENoYW5nZSIsICJyZWdfanVyaXNjaGFuZ2UiID0gIkp1cmlzZGljdGlvbiBDaGFuZ2UiKSkrDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbD1jb21tYSkNCmBgYA0KDQpFQVZTIGNhbGN1bGF0aW9ucyBmb3IgTGliZXJ0eSBDb3VudHkgYXJlIGNvbnNpc3RlbnRseSBpbmNvbnNpc3RlbnQuIA0KDQpgYGB7cn0NCmZsLmZvcm1zPC1tZWx0KGZsLmRmLCBpZC52YXJzID0gIm1hdGNoLmNvdW50eSIsIG1lYXN1cmUudmFycyA9IGMoImZvcm1zX21haWwiLCAiZm9ybXNfaW5wZXJzb24iLCAiZm9ybXNfb25saW5lIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1zX2RtdiIsICJmb3Jtc19udnJhIiwgImZvcm1zX2Rpc2FiaWxpdHkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybXNfYXJtZWRmb3JjZSIsICJmb3Jtc19ub25OVlJBIiwgImZvcm1zX2RyaXZlcyIpKQ0KDQpnZ3Bsb3QoZmwuZm9ybXMsIGFlcyh2YXJpYWJsZSwgdmFsdWUpKSsNCiAgICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikrIA0KICBsYWJzKHggPSAiIiwgeSA9ICIiLCB0aXRsZSA9ICJFQVZTIDIwMTgiLCBzdWJ0aXRsZSA9ICJUb3RhbCBSZWdpc3RyYXRpb24gRm9ybXMgYnkgU291cmNlIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDMwLCBoanVzdCA9IDEpKSsNCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHM9YygiZm9ybXNfbWFpbCIgPSAiQnkgTWFpbCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3Jtc19pbnBlcnNvbiIgPSAiSW4gUGVyc29uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybXNfb25saW5lIiA9ICJPbmxpbmUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybXNfZG12IiA9ICJETVYiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybXNfbnZyYSIgPSAiTlZSQSBNYW5kYXRlZCBBZ2VuY2llcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3Jtc19kaXNhYmlsaXR5IiA9ICJBZ2VuY2llcyBzZXJ2aW5nIERpc2FibGVkIFBlb3BsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1zX2FybWVkZm9yY2UiID0gIkFybWVkIEZvcmNlcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3Jtc19ub25OVlJBIiA9ICJOb24tTlZSQSBNYW5kYXRlZCBBZ2VuY2llcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3Jtc19kcml2ZXMiID0gIlJlZ2lzdHJhdGlvbiBEcml2ZXMiKSkrDQogICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPXByZXR0eV9icmVha3Mobj0xMCksIGxhYmVsPWNvbW1hKQ0KDQoNCmBgYA0KDQpgYGB7cn0NCmZsLmR1cDwtbWVsdChmbC5kZiwgaWQudmFycyA9ICJtYXRjaC5jb3VudHkiLCBtZWFzdXJlLnZhcnMgPSBjKCJkdXBfbWFpbCIsICJkdXBfaW5wZXJzb24iLCAiZHVwX29ubGluZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdXBfZG12IiwgImR1cF9OVlJBIiwgImR1cF9kaXNhYmlsaXR5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1cF9hcm1lZGZvcmNlIiwgImR1cF9ub25OVlJBIiwgImR1cF9kcml2ZSIpKQ0KDQpnZ3Bsb3QoZmwuZHVwLCBhZXModmFyaWFibGUsIHZhbHVlKSkrDQogICAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpKyANCiAgbGFicyh4ID0gIiIsIHkgPSAiIiwgdGl0bGUgPSAiRUFWUyAyMDE4Iiwgc3VidGl0bGUgPSAiRHVwbGljYXRlIFJlZ2lzdHJhdGlvbiBGb3JtcyBieSBTb3VyY2UiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0ID0gMSkpKw0KICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJkdXBfbWFpbCIgPSAiQnkgTWFpbCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdXBfaW5wZXJzb24iID0gIkluIFBlcnNvbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgImR1cF9vbmxpbmUiID0gIk9ubGluZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdXBfZG12IiA9ICJETVYiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVwX05WUkEiID0gIk5WUkEgTWFuZGF0ZWQgQWdlbmNpZXMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVwX2Rpc2FiaWxpdHkiID0gIkFnZW5jaWVzIHNlcnZpbmcgRGlzYWJsZWQgUGVvcGxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVwX2FybWVkZm9yY2UiID0gIkFybWVkIEZvcmNlcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdXBfbm9uTlZSQSIgPSAiTm9uLU5WUkEgTWFuZGF0ZWQgQWdlbmNpZXMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVwX2RyaXZlIiA9ICJSZWdpc3RyYXRpb24gRHJpdmVzIikpKw0KICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1wcmV0dHlfYnJlYWtzKG49MTApLCBsYWJlbD1jb21tYSkNCmBgYA0KDQpXSEFUUyBUSEUgTkVXSVNIIExBVyBBQk9VVCBWT1RFUiBSRUcgSU4gRkxPUklEQT8NCmBgYHtyfQ0KZmwuaW52PC1tZWx0KGZsLmRmLCBpZC52YXJzID0gIm1hdGNoLmNvdW50eSIsIG1lYXN1cmUudmFycyA9IGMoImludl9tYWlsIiwgImludl9pbnBlcnNvbiIsICJpbnZfb25saW5lIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludl9kbXYiLCAiaW52X252cmEiLCAiaW52X2Rpc2FiaWxpdHkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52X2FybWVkZm9yY2UiLCAiaW52X25vbk5WUkEiLCAiaW52X2RyaXZlcyIpKQ0KDQpnZ3Bsb3QoZmwuaW52LCBhZXModmFyaWFibGUsIHZhbHVlKSkrDQogICAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpKyANCiAgbGFicyh4ID0gIiIsIHkgPSAiIiwgdGl0bGUgPSAiRUFWUyAyMDE4Iiwgc3VidGl0bGUgPSAiSW52YWxpZCBvciBSZWplY3RlZCBSZWdpc3RyYXRpb25zIGJ5IFNvdXJjZSIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSAzMCwgaGp1c3QgPSAxKSkrDQogICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPXByZXR0eV9icmVha3Mobj0xMCksIGxhYmVsPWNvbW1hKSsNCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJpbnZfbWFpbCIgPSAiQnkgTWFpbCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZfaW5wZXJzb24iID0gIkluIFBlcnNvbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgImludl9vbmxpbmUiID0gIk9ubGluZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZfZG12IiA9ICJETVYiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52X252cmEiID0gIk5WUkEgTWFuZGF0ZWQgQWdlbmNpZXMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52X2Rpc2FiaWxpdHkiID0gIkFnZW5jaWVzIHNlcnZpbmcgRGlzYWJsZWQgUGVvcGxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52X2FybWVkZm9yY2UiID0gIkFybWVkIEZvcmNlcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZfbm9uTlZSQSIgPSAiTm9uLU5WUkEgTWFuZGF0ZWQgQWdlbmNpZXMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52X2RyaXZlcyIgPSAiUmVnaXN0cmF0aW9uIERyaXZlcyIpKQ0KYGBgDQoNCg0KDQpUb3RhbCBudW1iZXIgb2YgZG9tZXN0aWMgYnktbWFpbCBiYWxsb3RzIHRyYW5zbWl0dGVkIChDMWEpOg0KYGBge3J9DQpmb3JtYXRDKHN1bShmbC5kZiR2Ym1fdG90YWwsIG5hLnJtID0gVCksIGZvcm1hdD0iZCIsIGJpZy5tYXJrPSIsIikNCmBgYA0KDQoNCmBgYHtyfQ0KZmwudmJtPC1tZWx0KGZsLmRmLCBpZC52YXJzID0gIm1hdGNoLmNvdW50eSIsIG1lYXN1cmUudmFycyA9IGMoInZibV9yZXR1cm5lZCIsICJ2Ym1fdW5kZWxpdmVyZWQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmJtX3ZvaWQiLCAidmJtX3Byb3YiLCAidmJtX3N0YXR1bmtub3duIikpDQoNCmdncGxvdChmbC52Ym0sIGFlcyh2YXJpYWJsZSwgdmFsdWUpKSsNCiAgICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikrIA0KICBsYWJzKHggPSAiIiwgeSA9ICIiLCB0aXRsZSA9ICJFQVZTIDIwMTgiLCBzdWJ0aXRsZSA9ICJDYXRlZ29yaWVzIG9mIFZCTSBCYWxsb3RzIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDMwLCBoanVzdCA9IDEpKSsNCiAgIHNjYWxlX3lfY29udGludW91cyhicmVha3M9cHJldHR5X2JyZWFrcyhuPTUpLCBsYWJlbD1jb21tYSkrDQogICAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHM9Yygidm1iX3JldHVybmVkIiA9ICJCYWxsb3QgUmV0dXJuZWQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmJtX3VuZGVsaXZlcmVkIiA9ICJCYWxsb3QgVW5kZWxpdmVyYWJsZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZibV92b2lkIiA9ICJCYWxsb3QgVm9pZGVkIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInZibV9wcm92IiA9ICJQcm92aXNpb25hbCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2Ym1fc3RhdHVua25vd24iID0gIlN0YXR1cyBVbmtub3duIikpDQpgYGANCg0KKipOb3RlKiogVGhlIFZCTSAncmV0dXJuZWQnIG1haWwgY2F0ZWdvcnkgaW5jbHVkZXMgYmFsbG90cyB0aGF0IGNvdW50ZWQgYW5kIGJhbGxvdHMgdGhhdCB3ZXJlIHJlamVjdGVkLiANCg0KVG90YWwgbnVtYmVyIG9mIGJ5LW1haWwgYmFsbG90cyB0aGF0IHdlcmUgcHJvY2Vzc2VkLCBjb3VudGVkLCBhbmQgaW5jbHVkZWQgaW4gdGhlIGNhbnZhcyBvZiBlbGVjdGlvbiByZXN1bHRzOg0KYGBge3J9DQpmb3JtYXRDKHN1bShmbC5kZiRtYWlsX3RvdGFsLCBuYS5ybSA9IFQpLCBmb3JtYXQ9ImQiLCBiaWcubWFyaz0iLCIpDQpgYGANCg0KDQpUb3RhbCBudW1iZXIgb2YgZG9tZXN0aWMsIGNpdmlsaWFuIGJ5LW1haWwgYmFsbG90cyByZWplY3RlZCAoQzRhKToNCmBgYHtyfQ0KZm9ybWF0QyhzdW0oZmwuZGYkbWFpbF9yZWplY3RlZCwgbmEucm0gPSBUKSwgZm9ybWF0PSJkIiwgYmlnLm1hcms9IiwiKQ0KYGBgDQoNCg0KYGBge3J9DQpmbC5yZWo8LW1lbHQoZmwuZGYsIGlkLnZhcnMgPSAibWF0Y2guY291bnR5IiwgbWVhc3VyZS52YXJzID0gYygicmVqX2RlYWRsaW5lIiwgInJlal92b3RlcnNpZyIsICJyZWpfd2l0c2lnIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlal9ub21hdGNoIiwgInJlal9Fb3NpZyIsICJyZWpfZW52IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlal9taXNzaW5nIiwgInJlal91bnNlYWxlZCIsICJyZWpfbm9hZGR5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWpfbXVsdGlwbGUiLCAicmVqX2RlY2Vhc2VkIiwgInJlal92b3RlZCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlal9ub0lEIiwgInJlal9ub2FwcCIpKQ0KDQpnZ3Bsb3QoZmwucmVqLCBhZXModmFyaWFibGUsIHZhbHVlKSkrDQogICAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpKyANCiAgbGFicyh4ID0gIiIsIHkgPSAiIiwgdGl0bGUgPSAiRUFWUyAyMDE4Iiwgc3VidGl0bGUgPSAiUmVqZWN0ZWQgYnktbWFpbCBiYWxsb3RzIGJ5IHJlamVjdGlvbiB0eXBlIikgKw0KICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0ID0gMSkpKw0KICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1wcmV0dHlfYnJlYWtzKG49NSksIGxhYmVsPWNvbW1hKSsNCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJyZWpfZGVhZGxpbmUiID0gIk1pc3NlZCBEZWFkbGluZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWpfdm90ZXJzaWciID0gIk5vIFZvdGVyIFNpZ25hdHVyZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlal93aXRzaWciID0gIk5vIFdpdG5lc3MgU2lnbmF0dXJlIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlal9ub21hdGNoIiA9ICJOb24tbWF0Y2hpbmcgU2lnbmF0dXJlIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlal9Fb3NpZyIgPSAiTm8gRU8gU2lnbmF0dXJlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVqX2VudiIgPSAiVW5vZmZpY2lhbCBFbnZlbG9wZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWpfbWlzc2luZyIgPSAiTWlzc2luZyBmcm9tIEVudmVsb3BlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVqX3Vuc2VhbGVkIiA9ICJFbnZlbG9wZSBVbnNlYWxlZCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWpfbm9hZGR5IiA9ICJObyBBZGRyZXNzIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlal9tdWx0aXBsZSIgPSAiTWFueSBCYWxsb3RzLCAxIEVudmVsb3BlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVqX2RlY2Vhc2VkIiA9ICJWb3RlciBEZWNlYXNlZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlal92b3RlZCIgPSAiVm90ZXIgVm90ZWQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVqX25vSUQiID0gIjFzdCBUaW1lIFZvdGVyIC0gTm8gSUQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVqX25vYXBwIiA9ICJObyBBcHBsaWNhdGlvbiBGb3VuZCIpKQ0KYGBgDQoNCg0KDQoNCmBgYHtyfQ0KZmwuZWRwcDwtbWVsdChmbC5kZiwgaWQudmFycyA9ICJtYXRjaC5jb3VudHkiLCBtZWFzdXJlLnZhcnMgPSBjKCJ0b19wcEVEIiwgInRvX0VWIikpDQoNCmdncGxvdChmbC5lZHBwLCBhZXModmFyaWFibGUsIHZhbHVlKSkrDQogICAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpKyANCiAgbGFicyh4ID0gIiIsIHkgPSAiIiwgdGl0bGUgPSAiRUFWUyAyMDE4Iiwgc3VidGl0bGUgPSAiVG90YWwgVHVybm91dDogRWFybHkgVm90ZSB2cy4gRWxlY3Rpb24gRGF5IikgKyAgICANCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSAzMCwgaGp1c3QgPSAxKSkrDQogICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPXByZXR0eV9icmVha3Mobj01KSwgbGFiZWw9Y29tbWEpKw0KICAgIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPWMoInRvX3BwRUQiID0gIlR1cm5vdXQgRUQgUG9sbGluZyBQbGFjZXMiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9fRVYiID0gIlR1cm5vdXQgRWFybHkgVm90aW5nIikpDQpgYGANCg0KDQpUaGVyZSB3ZXJlIDQwLDE0NCBwb2xsIHdvcmtlcnMgb24gRWxlY3Rpb24gRGF5IGNvdmVyaW5nIDQsNDYxIHBvbGxpbmcgcGxhY2VzIHN0YXRld2lkZS4gT24gYXZlcmFnZSwgZWFjaCBwb2xsaW5nIHBsYWNlIGlzIGFsbG9jYXRlZCA5IHBvbGx3b3JrZXJzIG9uIEVsZWN0aW9uIERheS4NCg0KQnV0IHRoZXJlIHdlcmUgNyw4NDcgcG9sbCB3b3JrZXJzIGR1cmluZyBFYXJseSBWb3RlIGNvdmVyaW5nIDM3MyBwb2xsaW5nIHBsYWNlcyBzdGF0ZXdpZGUuIE9uIGF2ZXJhZ2UsIGVhY2ggZWFybHkgdm90ZSBwb2xsaW5nIHBsYWNlIGlzIGFsbG9jYXRlZCAyMSBwb2xsIHdvcmtlcnMgb24gRWxlY3Rpb24gRGF5Lg0KDQpEaWZmaWN1bHRseSBpbiByZWNydWl0aW5nIHBvbGx3b3JrZXJzOg0KKioqKDEgPSB2ZXJ5IGRpZmZpY3VsdCwgMiA9IHNvbWV3aGF0IGRpZmZpY3VsdCwgMyA9IG5laXRoZXIgZGlmZmljdWx0IG5vciBlYXN5LCA0ID0gc29tZXdoYXQgZWFzeSwgNSA9IGVhc3ksIDYgPSBub3QgZW5vdWdoIGluZm8gdG8gYW5zd2VyKSBhZXMoeCA9IHJlb3JkZXIobWF0Y2guY291bnR5LCBDb2x1bW5OYW1lKSwgQ29sdW1uTmFtZSkpKioqDQpgYGB7cn0NCmZsLnB3PC1tZWx0KGZsLmRmLCBpZC52YXJzID0gIm1hdGNoLmNvdW50eSIsIG1lYXN1cmUudmFycyA9IGMoInB3X3JlY3J1aXRtZW50IikpDQoNCiAgZ2dwbG90KGZsLnB3LCBhZXMoeCA9IHJlb3JkZXIobWF0Y2guY291bnR5LCB2YWx1ZSksIHZhbHVlKSkrDQogICAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpKw0KICAgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpLA0KICAgICAgICAgYXhpcy50aXRsZS55PWVsZW1lbnRfYmxhbmsoKSkrDQogICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPXByZXR0eV9icmVha3Mobj01KSkNCmBgYA0KDQpgYGB7cn0NCmZsLnB3PC1tZWx0KGZsLmRmLCBpZC52YXJzID0gIm1hdGNoLmNvdW50eSIsIG1lYXN1cmUudmFycyA9IGMoInB3XzE4IiwgInB3XzE4XzI1IiwgInB3XzI2XzQwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB3XzQxXzYwIiwgInB3XzYxXzcwIiwgInB3XzcxIikpDQoNCmdncGxvdChmbC5wdywgYWVzKHZhcmlhYmxlLCB2YWx1ZSkpKw0KICAgIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSsgDQogIGxhYnMoeCA9ICIiLCB5ID0gIiIsIHRpdGxlID0gIkVBVlMgMjAxOCIsIHN1YnRpdGxlID0gIlBvbGwgV29ya2VycyBieSBBZ2UiKSArDQogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSAzMCwgaGp1c3QgPSAxKSkrDQogICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPXByZXR0eV9icmVha3Mobj01KSwgbGFiZWw9Y29tbWEpKw0KICAgIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPWMoInB3XzE4IiA9ICIxOCBZZWFycyBPbGQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHdfMThfMjUiID0gIjE5LTI1IFllYXJzIE9sZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInB3XzI2XzQwIiA9ICIyNi00MCBZZWFycyBPbGQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHdfNDFfNjAiID0gIjQxLTYwIFllYXJzIE9sZCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwd182MV83MCIgPSAiNjEtNzAgWWVhcnMgT2xkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHdfNzEiID0gIjcxIFllYXJzIG9yIE9sZGVyIikpDQpgYGANCg0KDQoNClRvdGFsIG51bWJlciBvZiBwcm92aXNpb25hbCBiYWxsb3RzIChFMWEpOg0KYGBge3J9DQpmb3JtYXRDKHN1bShmbC5kZiRwcm92X3RvdGFsLCBuYS5ybSA9IFQpLCBmb3JtYXQ9ImQiLCBiaWcubWFyaz0iLCIpDQoNCmBgYA0KDQoNCg0KYGBge3J9DQpmbC5wcm92PC1tZWx0KGZsLmRmLCBpZC52YXJzID0gIm1hdGNoLmNvdW50eSIsIG1lYXN1cmUudmFycyA9IGMoInByb3ZfRnVsbENvdW50ZWQiLCAicHJvdl9QYXJ0Q291bnRlZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZfcmVqZWN0ZWQiKSkNCg0KZ2dwbG90KGZsLnByb3YsIGFlcyh2YXJpYWJsZSwgdmFsdWUpKSsNCiAgICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikrIA0KICBsYWJzKHggPSAiIiwgeSA9ICIiLCB0aXRsZSA9ICJFQVZTIDIwMTgiLCBzdWJ0aXRsZSA9ICJQcm92aXNpb25hbCBCYWxsb3RzIGJ5IERpc3Bvc2l0aW9uIikgKw0KICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0ID0gMSkpKw0KICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1wcmV0dHlfYnJlYWtzKG49NSksIGxhYmVsPWNvbW1hKSsNCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJwcm92X0Z1bGxDb3VudGVkIiA9ICJGdWxseSBDb3VudGVkIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZfUGFydENvdW50ZWQiID0gIlBhcnRpYWxseSBDb3VudGVkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdl9yZWplY3RlZCIgPSAiUmVqZWN0ZWQiKSkNCmBgYA0KDQpUb3RhbCBudW1iZXIgb2YgcmVqZWN0ZWQgcHJvdmlzaW9uYWwgYmFsbG90cyAoRTFkKToNCmBgYHtyfQ0KZm9ybWF0QyhzdW0oZmwuZGYkcHJlal90b3QsIG5hLnJtID0gVCksIGZvcm1hdD0iZCIsIGJpZy5tYXJrPSIsIikNCg0KYGBgDQoNCkVBVlMgYXJlIG5vdCBhbHdheXMgaW50ZXJuYWxseSBjb25zaXN0ZW50LiBGbG9yaWRhIGRhdGEgaGFzIHNvbWUgaW5jb25zaXN0ZW5jaWVzLiBJbiB0aGlzIGNhdGVyZ29yeSwgRHV2YWwgQ291bnR5IGlzIG9mZiBieSAzNywgTWlhbWktRGFkZSBpcyBvZmYgYnkgMTYgYW5kIFN1d2FubmVlIGlzIG9mZiBieSAxLg0KDQoNCmBgYHtyfQ0KZmwucHJlajwtbWVsdChmbC5kZiwgaWQudmFycyA9ICJtYXRjaC5jb3VudHkiLCBtZWFzdXJlLnZhcnMgPSBjKCJwcmVqX25vdHJlZyIsICJwcmVqX2p1cmlzIiwgInByZWpfcHJlY2luY3QiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlal9ub0lEIiwgInByZWpfaW5jb21wbGV0ZSIsICJwcmVqX21pc3NpbmciLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlal9ub3NpZyIsICJwcmVqX21pc21hdGNoIiwgInByZWpfdm90ZWQiKSkNCg0KZ2dwbG90KGZsLnByZWosIGFlcyh2YXJpYWJsZSwgdmFsdWUpKSsNCiAgICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikrIA0KICBsYWJzKHggPSAiIiwgeSA9ICIiLCB0aXRsZSA9ICJFQVZTIDIwMTgiLCBzdWJ0aXRsZSA9ICJSZWplY3RlZCBwcm92aXNpb25hbCBiYWxsb3RzIGJ5IHJlamVjdGlvbiB0eXBlIikgKw0KICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0ID0gMSkpKw0KICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1wcmV0dHlfYnJlYWtzKG49NSksIGxhYmVsPWNvbW1hKSsNCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJwcmVqX25vdHJlZyIgPSAiTm90IFJlZ2lzdGVyZWQgaW4gU3RhdGUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlal9qdXJpcyIgPSAiSW4gV3JvbmcgSnVyaXNkaWN0aW9uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlal9wcmVjaW5jdCIgPSAiSW4gV3JvbmcgUHJlY2luY3QiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlal9ub0lEIiA9ICJJbnN1ZmZpY2llbnQgSUQiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlal9pbmNvbXBsZXRlIiA9ICJCYWxsb3QgSW5jb21wbGV0ZSBvciBJbGxlZ2libGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVqX21pc3NpbmciID0gIkJhbGxvdCBNaXNzaW5nIGZyb20gRW52ZWxvcGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVqX25vc2lnIiA9ICJObyBWb3RlciBTaWduYXR1cmUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlal9taXNtYXRjaCIgPSAiTm9uLW1hdGNoaW5nIFNpZ25hdHVyZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWpfdm90ZWQiID0gIkFscmVhZHkgVm90ZWQiKSkNCmBgYA0KDQoNCg0KYGBge3J9DQpydDwtZ2dwbG90KGZsLmRmLCBhZXMoeCA9IHJlb3JkZXIoY291bnR5LCByZWdfdG90YWwpLCByZWdfdG90YWwsIGNvdW50eT1jb3VudHksICJSZWdpc3RyYXRpb24gVG90YWwiPXJlZ190b3RhbCkpKw0KICAgIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArDQogICAgbGFicyh4ID0gIiIsIHkgPSAiIiwgdGl0bGUgPSAiVG90YWwgUmVnaXN0cmF0aW9uIikgKw0KICAgIHNjYWxlX2ZpbGxfaWRlbnRpdHkoKSsNCiAgICB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAnZ3JheTk1JyksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgc2l6ZSA9IDYpKSsNCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9bWVkaWFuKGZsLmRmJHJlZ190b3RhbCwgbmEucm0gPSBUKSwgY29sb3I9ImJsYWNrIiwgbGluZXR5cGU9ImRhc2hlZCIpKw0KICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1wcmV0dHlfYnJlYWtzKG49NSksIGxhYmVsPWNvbW1hKSsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PW1lYW4oZmwuZGYkcmVnX3RvdGFsLCBuYS5ybSA9IFQpLCBjb2xvcj0iZGVlcHNreWJsdWU0IiwgbGluZXR5cGU9InNvbGlkIikNCg0KZ2dwbG90bHkocnQsIHRvb2x0aXAgPSBjKCJjb3VudHkiLCAicmVnX3RvdGFsIikpDQpgYGANCg0KDQoNCmBgYHtyfQ0Kcmk8LWdncGxvdChmbC5kZiwgYWVzKHggPSByZW9yZGVyKGNvdW50eSwgcmVnX2ludmFsaWQpLCByZWdfaW52YWxpZCwgY291bnR5PWNvdW50eSwgIlJlZ2lzdHJhdGlvbiBUb3RhbCI9cmVnX2ludmFsaWQpKSsNCiAgICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKw0KICAgIGxhYnMoeCA9ICIiLCB5ID0gIiIsIHRpdGxlID0gIlRvdGFsIFJlZ2lzdHJhdGlvbiIpICsNCiAgICBzY2FsZV9maWxsX2lkZW50aXR5KCkrDQogICAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gJ2dyYXk5NScpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHNpemUgPSA2KSkrDQogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PW1lZGlhbihmbC5kZiRyZWdfaW52YWxpZCwgbmEucm0gPSBUKSwgY29sb3I9ImJsYWNrIiwgbGluZXR5cGU9ImRhc2hlZCIpKw0KICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1wcmV0dHlfYnJlYWtzKG49NSksIGxhYmVsPWNvbW1hKSsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PW1lYW4oZmwuZGYkcmVnX2ludmFsaWQsIG5hLnJtID0gVCksIGNvbG9yPSJkZWVwc2t5Ymx1ZTQiLCBsaW5ldHlwZT0ic29saWQiKQ0KDQpnZ3Bsb3RseShyaSwgdG9vbHRpcCA9IGMoImNvdW50eSIsICJyZWdfaW52YWxpZCIpKQ0KYGBgDQoNCg0KYGBge3J9DQpyaTwtZ2dwbG90KGZsLmRmLCBhZXMoeCA9IHJlb3JkZXIoY291bnR5LCByZWdfZG12KSwgcmVnX2RtdiwgY291bnR5PWNvdW50eSwgIlJlZ2lzdHJhdGlvbiBUb3RhbCI9cmVnX2RtdikpKw0KICAgIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArDQogICAgbGFicyh4ID0gIiIsIHkgPSAiIiwgdGl0bGUgPSAiRE1WIFJlZ2lzdHJhdGlvbnMiKSArDQogICAgc2NhbGVfZmlsbF9pZGVudGl0eSgpKw0KICAgIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICdncmF5OTUnKSwgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCBzaXplID0gNikpKw0KICAgIGdlb21faGxpbmUoeWludGVyY2VwdD1tZWRpYW4oZmwuZGYkcmVnX2RtdiwgbmEucm0gPSBUKSwgY29sb3I9ImJsYWNrIiwgbGluZXR5cGU9ImRhc2hlZCIpKw0KICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcz1wcmV0dHlfYnJlYWtzKG49NSksIGxhYmVsPWNvbW1hKSsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PW1lYW4oZmwuZGYkcmVnX2RtdiwgbmEucm0gPSBUKSwgY29sb3I9ImRlZXBza3libHVlNCIsIGxpbmV0eXBlPSJzb2xpZCIpDQoNCmdncGxvdGx5KHJpLCB0b29sdGlwID0gYygiY291bnR5IiwgInJlZ19kbXYiKSkNCmBgYA0KDQoNCmBgYHtyfQ0KcmQ8LWdncGxvdChmbC5kZiwgYWVzKHggPSByZW9yZGVyKGNvdW50eSwgcmVnX2RyaXZlcyksIHJlZ19kcml2ZXMsIGNvdW50eT1jb3VudHksICJSZWcgRHJpdmVzIj1yZWdfZHJpdmVzKSkrDQogICAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgICBsYWJzKHggPSAiIiwgeSA9ICIiLCB0aXRsZSA9ICJETVYgUmVnaXN0cmF0aW9ucyIpICsNCiAgICBzY2FsZV9maWxsX2lkZW50aXR5KCkrDQogICAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gJ2dyYXk5NScpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHNpemUgPSA2KSkrDQogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PW1lZGlhbihmbC5kZiRyZWdfZHJpdmVzLCBuYS5ybSA9IFQpLCBjb2xvcj0iYmxhY2siLCBsaW5ldHlwZT0iZGFzaGVkIikrDQogICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzPXByZXR0eV9icmVha3Mobj01KSwgbGFiZWw9Y29tbWEpKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9bWVhbihmbC5kZiRyZWdfZHJpdmVzLCBuYS5ybSA9IFQpLCBjb2xvcj0iZGVlcHNreWJsdWU0IiwgbGluZXR5cGU9InNvbGlkIikNCg0KZ2dwbG90bHkocmQsIHRvb2x0aXAgPSBjKCJjb3VudHkiLCAicmVnX2RyaXZlcyIpKQ0KYGBgDQoNCmBgYHtyfQ0KdnQ8LWdncGxvdChmbC5kZiwgYWVzKHggPSByZW9yZGVyKGNvdW50eSwgdmJtX3RvdGFsKSwgdmJtX3RvdGFsLCBjb3VudHk9Y291bnR5LCAiUmVnIERyaXZlcyI9dmJtX3RvdGFsKSkrDQogICAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsNCiAgICBsYWJzKHggPSAiIiwgeSA9ICIiLCB0aXRsZSA9ICJUb3RhbCBWQk0gQmFsbG90cyIpICsNCiAgICBzY2FsZV9maWxsX2lkZW50aXR5KCkrDQogICAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gJ2dyYXk5NScpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHNpemUgPSA2KSkrDQogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PW1lZGlhbihmbC5kZiR2Ym1fdG90YWwsIG5hLnJtID0gVCksIGNvbG9yPSJibGFjayIsIGxpbmV0eXBlPSJkYXNoZWQiKSsNCiAgIHNjYWxlX3lfY29udGludW91cyhicmVha3M9cHJldHR5X2JyZWFrcyhuPTUpLCBsYWJlbD1jb21tYSkrDQogIGdlb21faGxpbmUoeWludGVyY2VwdD1tZWFuKGZsLmRmJHZibV90b3RhbCwgbmEucm0gPSBUKSwgY29sb3I9ImRlZXBza3libHVlNCIsIGxpbmV0eXBlPSJzb2xpZCIpDQoNCmdncGxvdGx5KHZ0LCB0b29sdGlwID0gYygiY291bnR5IiwgInZibV90b3RhbCIpLCBhdXRvc2l6ZSA9IEYsIHdpZHRoID0gNTAwLCBoZWlnaHQgPSA1MDApDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=